2.1 功能权限
功能权限是控制用户能访问哪些页面,能访问页面上的哪些组件(按钮、输入框、表格列、标签页等)。作用于前端页面。
功能权限主要分为页面权限和界面权限这两类。
1.页面权限
页面权限是对页面这个层级访问的控制,可以限制用户是否能访问这个页面。可以通过新建角色并分配功能权限来开启对本页面的访问。
(1)实现原理
数据库表写入
新建页面后,默认会在门户的数据库表中自动插入1条本页面的访问权限,但未指定角色。角色分配权限后,会自动新插入1条本页面的访问权限,并同时指定角色。
开发时设置写入的是门户的permission_debug表,运行时设置写入的是permission表。
其中code会描述是访问哪个页面文件,name为用户自定义的名称,type为menu(指功能权限),role_id如果未分配给角色则为空。例如:
访问约束
- 前端约束
当配置好权限,并分配给角色、授权给用户后,在门户显示页面菜单时,会判断登录的用户是否拥有该访问权限,如果不存在,则页面菜单不会显示出该页面。
- 后端约束
如果用户绕过页面菜单,直接访问页面的链接,则后端会进行判断并提示访问无权限,避免绕开前端的漏洞。
(2)实现效果
以功能权限页面为例,功能权限功能会自动加入该页面权限,如下图所示:
设置权限后的访问效果如下:
- 有页面访问权限
- 无页面访问权限
门户菜单没有出现“功能权限”页面。
- 绕过页面菜单直接访问页面链接
页面上会提示页面权限不足。
2.界面权限
界面权限是对页面上的组件这个层级访问的控制,可以限制只读或者隐藏相关组件,组件包括页面上加入的所有组件,比如文本、按钮、输入框、表格列、标签页等。
使用本功能需要从组件市场下载界面权限组件,并把界面权限组件、用户组件、上下文组件这3个组件同时加到页面中。
(1)实现原理
数据库表写入
新建界面权限后,默认会在门户的数据库表中自动插入1条权限,但未指定角色。角色分配权限后,会自动新插入1条同样的权限,并同时指定角色。
开发时设置写入的是门户的permission_debug表,当微服务注册到门户后,会写入到permission表中。
其中code会描述是哪个页面文件的权限标识,比如权限标识是gnqxymtabledisplay。name为用户自定义的名称,type为ui(指界面权限),debug_type为insert,role_id如果未分配给角色则为空。例如:
界面权限判断
当前端页面放置了界面权限组件后,平台会根据用户是否有授权的界面权限,来控制页面组件的只读、隐藏属性。
以以下配置为例,页面会根据权限标识(gnqxymtabledisplay),找到组件(tableColumn2),如果访问的用户没有该权限,则该组件设置为prop属性(hidden或者readonly),例如:
<item comps="tableColumn2" compsname="tableColumn2" id="default21" op="oneOf" permissions="gnqxymtabledisplay" permissionsname="功能权限页面表格列显示权限" prop="hidden"/>
(2)实现效果
界面权限配置如下:
访问效果如下:
- 有访问权限
- 无访问权限
具体表现为:
1、输入框和操作按钮为只读,操作不了;
2、发布者这列被隐藏了;
3、标签页中的“有权限用户可见”这个页签被隐藏了;